iT邦幫忙

2022 iThome 鐵人賽

DAY 15
2

學寫程式的第一個程式叫做 Hello World,那麼學習 NVIDIA Jetson Edge AI 的第一個程式呢?就叫做 Hello AI World 啦! Hello AI World 是一個由 NVIDIA 維護的專案,給要入門 NVIDIA Jetson 系列的夥伴學習使用,裡面有預訓練的 AI 模型、推論範例、訓練範例,囊括 C++ 與 Python 範例程式。 接下來幾天將使用此專案和各位一起學習!

Hello AI World (source: NVIDIA)
Hello AI World (source: NVIDIA)

安裝與啟動方式

Hello AI World 可以運行在所有 NVIDIA Jetson 家族的邊緣運算裝置,需求的環境就是 JetPack SDK,建置的方式可以如前述使用 SDK Manager 或是 SD Card image 燒錄 (僅限 Jetson Nano Dev Kit 和 Xavier NX Dev Kit)的方式進行系統建置。如果使用 reComputer 系列出廠已經預先安裝完 JetPack 4.6 也不需要再額外安裝了。啟動 Hello AI World 有以下兩種方式:

  • 從程式碼編譯後進行安奘與執行
  • 使用 Docker 容器啟動

Jetson Nano 剛推出之時只能從程式碼進行編譯,需要耗費大量的時間,且可能不小心動到系統參數或設定,就會無法順利安裝。現在可以透過 Docker 容器啟動,真的方便許多!以下將會使用 Docker 作為說明。真的有興趣想要嘗試編譯的也可以參考專案文件 Building the Project from Source

Docker 下載與啟動

Hello AI World 的 Docker Image 皆有放在 DockerHub 上,不同 JetPack SDK版本對應如下:

Container Tag L4T version JetPack version
dustynv/jetson-inference:r35.1.0 L4T R35.1 JetPack 5.0.2
dustynv/jetson-inference:r34.1.1 L4T R34.1.1 JetPack 5.0.1
dustynv/jetson-inference:r34.1.0 L4T R34.1 JetPack 5.0
dustynv/jetson-inference:r32.7.1 L4T R32.7.1 JetPack 4.6.1
dustynv/jetson-inference:r32.6.1 L4T R32.6.1 JetPack 4.6
dustynv/jetson-inference:r32.5.0 L4T R32.5.0 JetPack 4.5

如果不知道目前系統所安裝的 JetPack 版本也沒關係,執行 Docker 啟動腳本會自動找到正確的版本啟動!在終端機下輸入以下指令從 github clone 程式碼:

git clone --recursive https://github.com/dusty-nv/jetson-inference

進入專案目錄,並且執行 docker 腳本:

cd jetson-inference
docker/run.sh

第一次執行會跳出 Model Downloader 選取介面,總共有 53 個預訓練模型包含 Image Recognition, Object Detection, Mono Depth, Pose Estimation 等類型。如果不知道選什麼使用預設的選擇即可,否則也是相當花費時間與儲存空間的,後續有需要可以再透過指令進行下載,這邊直接點選 OK 進入下一步。

https://ithelp.ithome.com.tw/upload/images/20220926/20152064p6dQgCKeGw.png
接下來就會看到正在下載剛剛所選擇的模型,這部分會耗費一段時間,取決於所選模型數量與網路速度而定。

https://ithelp.ithome.com.tw/upload/images/20220926/20152064v2vOsFfQDz.png

最後 Docker 會把容器所需相關資料下載下來並執行,若看到終端機如下圖顯示 root@<hostname>:/jetson-inference# 就代表 Docker 已經順利運行起來囉!(已經在容器裡了!)

https://ithelp.ithome.com.tw/upload/images/20220926/20152064DekhGdPF6l.png

Volume 參數

由於 Docker 容器在退出後即會被刪除,在容器內產生的運算結果以及相關資料也會跟著不翼而飛,因此預設腳本會使用 docker 的 volume 參數,

  • jetson-inference/data (存放資料,包含預訓練模型、 測試影像資料等)
  • jetson-inference/python/training/classification/data (存放影像分類的訓練資料)
  • jetson-inference/python/training/classification/models (存放訓練好的影像分類模型)
  • jetson-inference/python/training/detection/ssd/data (存放物件偵測的訓練資料)
  • jetson-inference/python/training/detection/ssd/models (存放訓練好的物件偵測模型)

如果有額外檔案系統掛載於容器需求,也可以在執行 docker 腳本時附帶參數如下方程式碼,指定所要映射的路徑(路徑必須要為絕對路徑!):

docker/run.sh --volume /my/host/path:/my/container/path

執行範例

在 docker 容器中輸入以下指令,開啟 video-viewer 並指定 /dev/video0 裝置以檢視 Webcam 即時畫面,來確定容器運作正常,並且可以使用 webcam 的硬體裝置。

video-viewer /dev/video0

https://ithelp.ithome.com.tw/upload/images/20220926/201520641x1U5nCav1.jpg

第一個推論程式

在 docker 容器執行 imagenet 影像分類範例程式,後續的兩個參數分別為輸入影像與輸出影像。

imagenet images/jellyfish.jpg images/test/jellyfish.jpg

完成後可以從資料夾瀏覽器開啟 ~/jetson-inference/image/test/jellyfish.jpg 來看看剛執行的推論指令其輸出的結果。如下圖顯示, 99.85% 的機率圖片中是個水母。

https://ithelp.ithome.com.tw/upload/images/20220926/20152064RSVIW4O48d.png

若要執行物件偵測則使用 detecnet 指令,預設參數同樣為輸入與輸出檔案。

detectnet images/peds_0.jpg images/test/peds_0.jpg

過程中會看到許多以 [TRT] 為開頭的 log 資訊,並且跑上好一段時間,這其實是因為第一次使用的模型被載入到 GPU 推論之前,會經過 TensorRT 的最佳化處理,來得到最好的推論效能。當第二次開始要執行該模型進行推論時,就不需要再次轉置了!而實際花費的時間可以參考最後的 summary,以此物件偵測推論為例,使用的模型為 ssd_mobilenet_v2_coco,總花費的時間為 87ms。
https://ithelp.ithome.com.tw/upload/images/20220926/20152064xiR9uzCFIE.png

輸出的物件偵測結果:
https://ithelp.ithome.com.tw/upload/images/20220926/20152064H9O0vbIP6Y.jpg

當然我們也可以從 Webcam 擷取影像,當作輸入的影像來源。

detectnet /dev/video0

從 Webcam 影像進行推論的輸出結果:
https://ithelp.ithome.com.tw/upload/images/20220926/20152064kqVOQ8vCgr.jpg

小結

現行環境建置只要透過 docker 就能快速完成,真的省下不少事!今天我們只有簡單跑幾個範例來驗證環境,接下來我們將會依序來看幾個推論範例來看看 Edge AI 可以怎麼玩, don't miss out!


上一篇
【Day 14】Getting Started with AI on Jetson Nano (三): Image Regression 影像回歸
下一篇
【Day 16】Hello AI World (二):Image Classification 影像分類
系列文
就用 Jetson Nano 來實作 Edge AI 吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言